import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.awt.Font;
import javax.swing.JTextArea;
import javax.swing.JButton;
import javax.swing.JSeparator;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import javax.swing.DefaultListModel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.JList;
import java.util.List;
import java.util.Set;
import java.util.ArrayList;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.JTable;

public class VueSaisieParutionArticle extends Vue {

	private JFrame frame;
	private JTextField textFieldTitre;
	private JTextField textFieldNom;
	private JTextField textFieldPrenom;
	private JTextArea textArea;
	private HashSet<String> auteurs = new HashSet<String>();
	private HashSet<String> motsClees = new HashSet<String>();
	private String listAut = "";
	private String listMot ="";
	private JButton buttonValider;
	private String[] columnNames = {"Auteur","mots clés"};
	private Object[][] donnees = {{"",""}};
	private JTextField textFieldNbPages;
	private String titre;
	private String nbPages;
	private DefaultListModel mo = new DefaultListModel();
	private JList ListMotsClee = new  JList(mo);
	private DefaultListModel aut = new DefaultListModel();
	private JList ListAuteur = new  JList(aut);
	private DefaultListModel cle = new DefaultListModel();
	private JList ListCle = new  JList(cle);
	private Parution parution;

	
	private JButton button_1;
	
	/**
	 * Create the application.
	 */
	public VueSaisieParutionArticle(final Controleur controleur,final Parution par) {
		super(controleur);
		parution=par;
		frame = new JFrame();
		frame.setBounds(100, 100, 531, 606);
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frame.getContentPane().setLayout(null);
		
		JLabel label = new JLabel("Ajout d'un article Ã  la parution");
		label.setFont(new Font("Dialog", Font.BOLD, 12));
		label.setBounds(110, 0, 190, 15);
		frame.getContentPane().add(label);
		
		JTextArea textAreaTitrePar = new JTextArea();
		textAreaTitrePar.setText(par.get_NomParution());
		textAreaTitrePar.setEditable(false);
		textAreaTitrePar.setBounds(307, 0, 101, 19);
		frame.getContentPane().add(textAreaTitrePar);
		JLabel label_1 = new JLabel(":");
		label_1.setBounds(351, 0, 3, 15);
		frame.getContentPane().add(label_1);
		
		JLabel label_2 = new JLabel("Articles dÃ©jÃ  enregistrÃ©s :");
		label_2.setBounds(12, 27, 158, 15);
		frame.getContentPane().add(label_2);
		
		JLabel label_3 = new JLabel("Titre :");
		label_3.setBounds(59, 169, 36, 15);
		frame.getContentPane().add(label_3);
		
		textFieldTitre = new JTextField();
		textFieldTitre.setColumns(10);
		textFieldTitre.setBounds(170, 167, 216, 18);
		frame.getContentPane().add(textFieldTitre);
		
		JLabel label_4 = new JLabel("Auteur");
		label_4.setFont(new Font("Dialog", Font.BOLD, 11));
		label_4.setBounds(12, 246, 46, 14);
		frame.getContentPane().add(label_4);
		
		JLabel label_5 = new JLabel("(appuyez sur + si vous dÃ©sirez ajouter un auteur) : ");
		label_5.setFont(new Font("Dialog", Font.ITALIC, 10));
		label_5.setBounds(59, 248, 248, 13);
		frame.getContentPane().add(label_5);
		
		textFieldNom = new JTextField();
		textFieldNom.setColumns(10);
		textFieldNom.setBounds(71, 268, 140, 19);
		frame.getContentPane().add(textFieldNom);
		
		JLabel label_7 = new JLabel("PrÃ©nom :");
		label_7.setBounds(232, 271, 54, 15);
		frame.getContentPane().add(label_7);
		
		textFieldPrenom = new JTextField();
		textFieldPrenom.setColumns(10);
		textFieldPrenom.setBounds(296, 270, 148, 15);
		frame.getContentPane().add(textFieldPrenom);
		
		buttonValider = new JButton("+");
		buttonValider.setBounds(460, 262, 44, 25);
		frame.getContentPane().add(buttonValider);
		buttonValider.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String auteurNom = textFieldNom.getText();
				String auteurPrenom = textFieldPrenom.getText();

				if (auteurNom.length() == 0 || auteurPrenom.length() == 0  )
				{
					Message dialog = new Message("Le nom et le prenom sont nécéssaire.");
					dialog.setVisible(true);
				}
				else{
					String auteur = auteurNom+" "+auteurPrenom;
					//auteur = auteur.toLowerCase();
					//auteur = auteur.substring(0,1).toUpperCase();
					if (!auteurs.contains(auteur)) {
						auteurs.add(auteur);
						alimenteAut(auteur);
					} else {
						Message dialog = new Message("Auteur deja present");
						dialog.setVisible(true);
					}
				}
				textFieldNom.setText(null);
				textFieldPrenom.setText(null);
			}
		});
		
		JLabel label_8 = new JLabel("Nom :");
		label_8.setBounds(22, 271, 36, 15);
		frame.getContentPane().add(label_8);
		
		JLabel label_6 = new JLabel("Mot clÃ©");
		label_6.setFont(new Font("Dialog", Font.BOLD, 11));
		label_6.setBounds(8, 297, 50, 14);
		frame.getContentPane().add(label_6);
		
		JLabel label_9 = new JLabel("(appuyez sur + si vous dÃ©sirez ajouter un mot clÃ©) : ");
		label_9.setFont(new Font("Dialog", Font.ITALIC, 10));
		label_9.setBounds(71, 299, 252, 13);
		frame.getContentPane().add(label_9);
		
		button_1 = new JButton("+");
		button_1.setBounds(460, 353, 44, 25);
		frame.getContentPane().add(button_1);
		button_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Object selection = ListMotsClee.getSelectedValue();
				if(selection == null){
					Message dialog = new Message("Vous devez selectionner le périodique associé à la nouvelle parution.");
					dialog.setVisible(true);
				}
				else if( motsClees.contains(selection)){
					Message dialog = new Message("Le mot cle a déjà été ajouté.");
					dialog.setVisible(true);
				}
				else{
					motsClees.add(selection.toString());
					alimenteCle(selection.toString());
				}
			}
		});
				
		JSeparator separator = new JSeparator();
		separator.setBounds(12, 153, 504, 2);
		frame.getContentPane().add(separator);
		
		JLabel lblAuteurAjouts = new JLabel("Auteur ajoutés:");
		lblAuteurAjouts.setBounds(10, 407, 104, 15);
		frame.getContentPane().add(lblAuteurAjouts);
		
		JButton button_2 = new JButton("Terminer et quitter");
		button_2.setBounds(71, 517, 152, 25);
		frame.getContentPane().add(button_2);
		button_2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				getControleur().fermerVue(VueSaisieParutionArticle.this);
				frame.setVisible(false);
			}
		});
		JButton button_3 = new JButton("Ajouter");
		button_3.setBounds(364, 517, 80, 25);
		frame.getContentPane().add(button_3);
		button_3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				getControleur().EnregistrerArticle(par,getTitre(),getNbPages(),auteurs,motsClees);
				redessinner();
				
			}
		});
		textArea = new JTextArea();
		textArea.setBounds(22, 53, 470, 79);
		frame.getContentPane().add(textArea);
		
		JLabel lblNumroDePage = new JLabel("Numéro de page :");
		lblNumroDePage.setBounds(59, 211, 101, 14);
		frame.getContentPane().add(lblNumroDePage);
		
		textFieldNbPages = new JTextField();
		textFieldNbPages.setBounds(170, 208, 84, 20);
		frame.getContentPane().add(textFieldNbPages);
		textFieldNbPages.setColumns(10);

		
		HashSet<MotsClee> mots = getControleur().getMotsClee();
		for (MotsClee mot : mots) {
			mo.addElement(mot.getMot());
		}
		ListMotsClee.setModel(mo);
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane.setBounds(18, 322, 432, 79);
		scrollPane.setViewportView(ListMotsClee);
		frame.getContentPane().add(scrollPane);
		
		JLabel lblMotsClsAjouts = new JLabel("Mots clés ajoutés :");
		lblMotsClsAjouts.setBounds(261, 407, 93, 14);
		frame.getContentPane().add(lblMotsClsAjouts);
		
		JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane_1.setBounds(12, 427, 223, 79);
		scrollPane_1.setViewportView(ListAuteur);
		frame.getContentPane().add(scrollPane_1);
		
		JScrollPane scrollPane_2 = new JScrollPane();
		scrollPane_2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane_2.setBounds(271, 427, 234, 79);
		scrollPane_2.setViewportView(ListCle);
		frame.getContentPane().add(scrollPane_2);
		alimenteArticles();
		frame.setVisible(true);
	}
	
	public void alimenteArticles() {
		//HashMap<String, Article>  articleTab = getControleur().get_articles();
		Collection<Article> articleSet = parution.get_article().values();

		if (articleSet!= null){
			for (Article art : articleSet) {
				textArea.append(art.get_titre()+"     "+art.get_nbPages()+"\n");
			}
		}
	}

	
	private String getTitre(){
		titre = textFieldTitre.getText();
		if (titre.length() == 0){
			titre = "";
		}
		return(titre);
	}
	private String getNbPages(){
		nbPages = textFieldNbPages.getText();
		if (nbPages.length() == 0){
			nbPages = "";
		}
		return(nbPages);
	}
	private void alimenteAut(String param){
			aut.addElement(param);
			
	}
	
	private void alimenteCle(String param){
			cle.addElement(param);
	}
	
	private void redessinner()
	{
		frame.setVisible(false);
		getControleur().AjouterArticle(parution.get_IdParution());
	}

}
